\section{数字类型}

Python 3 支持3种不同类型的数字类型。
\begin{description}
	\item[int] 整型数字，比如2015。
	\item[float] 浮点型数字，比如3.14。
	\item[complex] 复数，比如3+2j。
\end{description}

\subsection{查看变量类型}

Python 使用内置函数 type()来查看变量的类型。在Python中，内置了一些高效强大的对象类型，使得开发人员不用从零开始进行编程。实际上，Python中的每样东西都是对象。虽然Python中没有类型声明，但表达式的语法决定了创建和使用的对象的类型。一旦创建了一个对象，它就和操作集合绑定了，这就是所谓的动态类型和强类型语言。即Python自动根据表达式创建类型，一旦创建成功，只能对一个对象进行适合该类型的有效操作。\cite{PSF，2015}

\begin{lstlisting}
>>> x = 12
>>> type(x)
 <class 'int'>
\end{lstlisting}

\subsection{整型}

整型（int）字面量在Python中属于int类。

\begin{lstlisting}
>>> i = 100
>>> i
100
\end{lstlisting}

数字可以进行各种运算，如：

\begin{lstlisting}
123 + 345
\end{lstlisting}

还可以使用数学模块进行更高级的运算，如产生随机数等等：

\begin{lstlisting}
import random
print(random.random())
\end{lstlisting}

import表示引入模块，import random就是引入随机数模块。

\subsection{浮点类型}

浮点数（float）是指有小数点的数字。

\begin{lstlisting}
>>> f = 12.3
>>> type(f)
<class 'float'>
\end{lstlisting}

\subsection{复数}

复数（Complex number）由实数和虚数两部分构成，虚数用j表示。我们可以这样定义一个复数：

\begin{lstlisting}
>>> x = 2+3j
>>> type(x)
<class 'complex'>
\end{lstlisting}

\subsection{运算符}

Python有各种运算符，我们可以使用这些运算符完成计算。运算符见下表\ref{tab:数字运算符}：

% Table generated by Excel2LaTeX from sheet 'Sheet1'
\begin{table}[htbp]
  \centering
  \caption{Python常用数字运算符}
    \begin{tabular}{llll}
    \toprule
    名称      & 含义      & 例子      & 运行结果 \\
    \midrule
    +       & 加       & 3+1     & 4 \\
    -       & 减       & 40-2    & 38 \\
    $*$       & 乘       & 3*2     & 6 \\
    /       & 除       & 6/3     & 2 \\
    //      & 取整除     & 3//2    & 1 \\
    **      & 幂       & 2**3    & 8 \\
    \%      & 求余数     & 7\%2    & 1 \\
    \bottomrule
    \end{tabular}%
  \label{tab:数字运算符}%
\end{table}%

\subsection{运算符的优先级别}
Python按照运算符的有限级别计算表达式的值，比如：

\begin{lstlisting}
>>> 3 * 4 + 1
\end{lstlisting}

在上面的表达式中，应该先进行加运算还是乘运算？为了搞清楚这个问题，我们需要明白Python中运算符的优先级别，表\ref{tab:运算符的优先级别}显示了运算符的优先级别，依次从高到底排列如下：

% Table generated by Excel2LaTeX from sheet 'Sheet1'
\begin{table}[ht]
  \centering
  \caption{运算符的优先级别}
    \begin{tabular}{ll}
    \toprule
    运算符               & 描述 \\
    \midrule
    'expression,...'    & 字符串转换 \\
    \{key:datum,...\}   & 字典显示 \\
    {[expression,...]}  & 列表显示 \\
    ()                  & 分组 \\
    f(args...)          & 函数调用 \\
    x[index:index]      & 列表切分 \\
    x[index]            & 元素下标 \\
    x.attr              & 调用对象属性 \\
    $**$                & 指数运算 \\
    {\^{}x}             & 按位取反 \\
    +x,-x               & 正负号 \\
    $*$，/，\%          & 乘、除、取余数 \\
    +，-                & 加，减 \\
    <<，>>              & 逐位左移，逐位右移 \\
    \&                  & 逐位求和 \\
    {\^{}}              & 逐位异或 \\
    |                   & 逐位或 \\
    <,<=,>,>=,<>,!=,==  & 比较  \\
    is,not is           & 同一性测试 \\
    in,not in           & 成员资格判断 \\
    not x               & 布尔“非” \\
    and                 & 布尔“并” \\
    or                  & 布尔“或” \\
    lambda              & Lamada表达式 \\
    \bottomrule
    \end{tabular}%
  \label{tab:运算符的优先级别}%
\end{table}%

在上表中我们可以看到，乘法运算的级别高于加法，因此，先进行乘法运算，再进行加法运算，最后的计算结果为13。

\begin{lstlisting}
>>> 3 * 4 + 1
>>> 13
\end{lstlisting}

让我们再看下面的例子，以便演示优先顺序的另一个问题：

\begin{lstlisting}
>>> 3 + 4 - 2
\end{lstlisting}

上述表达式到底先进行加法运算还是减法呢？因为在表\ref{tab:运算符的优先级别}中我们看到加减运算的优先级别相同。当优先级别相同时，表达式从左向右计算，也就是说，上述的例子将先进行加法运算，再进行减法运算。

\begin{lstlisting}
>>> 3 + 4 - 2
>>> 5
\end{lstlisting}

同级别运算符从左到右运算，这条规则有个例外，那就是赋值运算( = )，赋值运算是从右向左计算的。例如：

\begin{lstlisting}
a = b = c
\end{lstlisting}

先将c的值，赋给b，再将b的值赋给a。

\subsection{增强赋值运算符}

增强赋值运算符能简化赋值声明语句，例如：

\begin{lstlisting}
>>> count = 1
>>> count = count + 1
>>> count
2
\end{lstlisting}

使用增强赋值运算符，我们可以将上述代码变为：

\begin{lstlisting}
>>> count = 1
>>> count += 1
>>> count
2
\end{lstlisting}

类似的增强赋值运算符，除了+=外，还有-=，\%=，$//=$  , $/=$  , $*$=  , $**$=。
